/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package RDA;

import javax.swing.Timer;
import newMenu.ManagerPerfil;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;

/**
 *
 * @author Raúl Delgado & Xavi Pol
 */
public class EstatJuego0 extends BasicGameState {
    public static final int ID = 14;
    StateBasedGame state;
    Timer timer;
    final String[] oleadaEnemigos = {"nave0", "nave0A", "nave0B", "nave0C", "nave2A", "nave2B", "nave1" ,"nave1" ,"descanso", "descanso", "descanso", "nave0E", "nave0F", "nave0C", "nave0C", "nave0C"};
    Image imagenFondo;
    //aux2 a = new aux2();
    ElementosJuego ej = new ElementosJuego();
    NaveBase naveBaseW = null;
    NaveBase nbBoss = null;
    float x = 350;
    float y = 800;
    float ifm = -1300;  //Imagen Fondo Movimiento
    float velocidadNave;
    int idioma;
    int puntuacion = 0;
    int disparos = 0;      //Contador de disparos realizados
    int enemigoF = 0;   //auxiliar para controlar cuando salir el boss
    int nave;   
    int contador;
    boolean nivelFin = false;
    boolean enemigo = true;
    //boolean gamestart = false;
    //boolean pause = false;


    public void init(GameContainer container, StateBasedGame game) throws SlickException {
        this.state = game;
        imagenFondo = new Image("src/data/superLand.png");
        nave = 1;
        switch (nave) {
            case 1:
                naveBaseW = FabricaNaves.naveWida("nave2");
                ej.posicionaUnitatAmiga(x, y, naveBaseW);
                velocidadNave = 0.4f;
                break;
            case 2:
                velocidadNave = 0.5f;
                break;
            case 3:
                naveBaseW = FabricaNaves.naveWida("nave3");
                ej.posicionaUnitatAmiga(x, y, naveBaseW);
                //a.posicionaUnitatAmiga(x, y, naveBaseW);
                velocidadNave = 0.6f;
                break;
        }
    }

    public void update(GameContainer gc, StateBasedGame game, int delta) throws SlickException {
        Input input = gc.getInput();

        if (naveBaseW.y > 648) {
            naveBaseW.y -= 5;
            naveBaseW.posicion(naveBaseW.x, naveBaseW.y);
        }

        if (!(naveBaseW.destruido)) {
            if (nivelFin) {
                if (naveBaseW.y > -150) {
                    naveBaseW.y -= 5;
                    naveBaseW.posicion(naveBaseW.x, naveBaseW.y);
                } else {
                    game.enterState(9);
                }
            } else {
                if (naveBaseW.y > 648) {
                    naveBaseW.y -= 5;
                    naveBaseW.posicion(naveBaseW.x, naveBaseW.y);
                }
                if (input.isKeyDown(Input.KEY_A)) {
                    float auxX = naveBaseW.x;
                    naveBaseW.x += -velocidadNave * delta;
                    if (naveBaseW.x <= -30) {
                        naveBaseW.x = auxX;
                    }
                    naveBaseW.posicion(naveBaseW.x, naveBaseW.y);
                }

                if (input.isKeyDown(Input.KEY_D)) {
                    float auxX = naveBaseW.x;
                    naveBaseW.x += velocidadNave * delta;
                    if (924 <= naveBaseW.x) { //en original 1024X768
                        naveBaseW.x = auxX;
                    }
                    naveBaseW.posicion(naveBaseW.x, naveBaseW.y);
                }
                if (input.isKeyDown(Input.KEY_S)) {
                    float hip = velocidadNave * delta;
                    float auxY = naveBaseW.y;
                    naveBaseW.x += hip * java.lang.Math.sin(java.lang.Math.toRadians(0.0));
                    naveBaseW.y += hip * java.lang.Math.cos(java.lang.Math.toRadians(0.0));
                    if (648 <= naveBaseW.y) {
                        naveBaseW.y = auxY;
                    }
                    naveBaseW.posicion(naveBaseW.x, naveBaseW.y);
                }

                if (input.isKeyDown(Input.KEY_W)) {
                    float hip = velocidadNave * delta;
                    float auxY = naveBaseW.y;
                    naveBaseW.x += hip * java.lang.Math.sin(java.lang.Math.toRadians(0.0));
                    naveBaseW.y -= hip * java.lang.Math.cos(java.lang.Math.toRadians(0.0));
                    if (naveBaseW.y <= 0) {
                        naveBaseW.y = auxY;
                    }
                    naveBaseW.posicion(naveBaseW.x, naveBaseW.y);
                }
                if (input.isKeyPressed(Input.KEY_SPACE)) {
                    disparos++;
                    Disparo disparo = null;
                    //disparo = naveBaseW.disparo.copiarShoot();
                    disparo = naveBaseW.getDisparo();
                    //a.posShoot(naveBaseW.x + 58, naveBaseW.y, disparo);
                    ej.posicionaDisparo(naveBaseW.x, naveBaseW.y, disparo);
                }
                if ((int) java.lang.Math.sin(java.lang.Math.toRadians(contador)) == 1 || (int) java.lang.Math.sin(java.lang.Math.toRadians(contador)) == -1) {
                    oleadaEnemigos(1);
                }
                contador += 2;

            }
        } else {
            naveBaseW.posicion(1000, 1000);
            game.enterState(5); //relativo
        }

        //a.update(delta);
        //ifm += 0.2;
        ifm = ifm != 0 ? ifm += 0.3 : 0;
    }

    public void oleadaEnemigos(int x) {
        if (enemigoF < oleadaEnemigos.length) {
            ej.posicionaUnitatEnemiga(oleadaEnemigos[enemigoF]);
            enemigoF += x;
        }
//        if (enemigoF < oleadaEnemigos.length) {
//            a.posicionaUnitatEnemiga(oleadaEnemigos[enemigoF]);
//            enemigoF += x;
//        } else if (enemigoF == oleadaEnemigos.length) {
//            a.posicionaUnitatEnemiga("boss1");//boss
//            enemigoF += x;
//        } else {
//            gameend = a.anbE.get(a.anbE.size() - 1).isMort();
//        }
    }

    public void render(GameContainer gc, StateBasedGame game, Graphics g) throws SlickException {
        imagenFondo.draw(200, ifm);
        //a.dibuixar(g, gc);
        NaveWida naveW = (NaveWida) naveBaseW;
        estadoNave(gc, game, g);
        if(idioma == 1){
            g.drawString("Puntuación: " + naveW.getPuntuancion(), 20, 500);
        }else if(idioma == 2){
            g.drawString("Puntuació: " + naveW.getPuntuancion(), 20, 500);
        }else if(idioma == 3){
            g.drawString("Score: " + naveW.getPuntuancion(), 20, 500);
        }


    }

    public void estadoNave(GameContainer gc, StateBasedGame game, Graphics g)
            throws SlickException {
        NaveWida naveW = (NaveWida) naveBaseW;
        g.setColor(Color.blue);
        g.fillRect(0, 0, 1024, 40);
        naveW.renderVida(gc, g);
        naveW.renderVides(gc, g);
    }

    @Override
    public void enter(GameContainer gc, StateBasedGame state) {
        idioma = ManagerPerfil.getIdioma();
//        p = new Tauler(6, 10, 1024, 600);
//        md = new ManagerDinersAures();
//        mi = new MenuIngame(gc, 0, 600, ManagerRecursos.getImage("contenidorIngameImage"), ManagerPerfil.getUnitatsTriades(), md, state);
//        mi.clear();
//        mi.reiniciarBotons();
//        ManagerContext.setDiners(md);
//        ManagerEnemics.iniciarCompteEnrere();
    }
    @Override
    public int getID() {
        return ID;

    }


}

